import { createRouter, createWebHashHistory } from "vue-router";
import { ElMessage } from 'element-plus'
import routerMap from './constant-router-map'
import { useAuthStore } from '@renderer/store/modules/auth'

const router = createRouter({
    history: createWebHashHistory(),
    routes: routerMap
})

// 路由守卫：权限验证
router.beforeEach(async (to, from, next) => {
  const authStore = useAuthStore()
  
  console.log('路由导航:', {
    from: from.path,
    to: to.path,
    isLoggedIn: authStore.isLoggedIn,
    userType: authStore.userType
  })

  // 公开路由：不需要登录验证
  const publicRoutes = ['/', '/login', '/404']
  const isPublicRoute = publicRoutes.includes(to.path)

  if (isPublicRoute) {
    // 如果已登录用户访问登录页，重定向到对应的工作台
    if ((to.path === '/' || to.path === '/login') && authStore.isLoggedIn) {
      console.log('已登录用户重定向到工作台:', authStore.getRedirectPath)
      next(authStore.getRedirectPath)
      return
    }
    
    next()
    return
  }

  // 私有路由：需要登录验证
  if (!authStore.isLoggedIn) {
    console.log('未登录，重定向到登录页')
    ElMessage.warning('请先登录')
    next('/login')
    return
  }

  // 验证Token有效性
  try {
    const isValidToken = await authStore.checkTokenValidity()
    if (!isValidToken) {
      console.log('Token无效，重定向到登录页')
      ElMessage.error('登录已过期，请重新登录')
      next('/login')
      return
    }
  } catch (error) {
    console.error('Token验证失败:', error)
    next('/login')
    return
  }

  // 角色权限验证
  const userType = authStore.userType
  const targetPath = to.path

  // 超级管理员路由权限验证
  if (targetPath.startsWith('/admin/')) {
    if (userType !== 'super_admin') {
      console.log('权限不足，无法访问超级管理员页面')
      ElMessage.error('权限不足，无法访问该页面')
      next(authStore.getRedirectPath)
      return
    }
  }

  // 店长路由权限验证
  if (targetPath.startsWith('/manager/')) {
    if (userType !== 'manager') {
      console.log('权限不足，无法访问店长页面')
      ElMessage.error('权限不足，无法访问该页面')
      next(authStore.getRedirectPath)
      return
    }
  }

  // 打手路由权限验证
  if (targetPath.startsWith('/worker/')) {
    if (userType !== 'worker') {
      console.log('权限不足，无法访问打手页面')
      ElMessage.error('权限不足，无法访问该页面')
      next(authStore.getRedirectPath)
      return
    }
  }

  console.log('路由验证通过，允许访问:', targetPath)
  next()
})

// 路由后置守卫：记录访问日志
router.afterEach((to, from) => {
  console.log('路由跳转完成:', {
    from: from.path,
    to: to.path,
    timestamp: new Date().toISOString()
  })
})

// 路由错误处理
router.onError((error) => {
  console.error('路由错误:', error)
  ElMessage.error('页面加载失败，请刷新重试')
})

export default router